import { Base } from "../core/Base";
import { ComponentManager } from "./ComponentManager";
import { EntityManager } from "./EntityManager";
import { PipeManager } from "./PipeManager";
import { SystemManager } from "./SystemManager";
/**
 * 注册类，注册所有的管理类
 * @author jiangjinwei
 * @memberof w
 */
class Register extends Base {
  static instance = null;
  constructor(opts = {}) {
    if (Register.instance) {
      return Register.instance;
    }
    super(opts);
    //注册16个组件管理类,分别管理16类组件。
    this._managers = [];
    for (let i = 0; i < 22; i++) {
      this.managers[i] = new ComponentManager({ type: i });
    }
    //注册一个实体管理类管理实体。
    this._entityManager = new EntityManager();
    //注册系统管理类
    this._systemManager = new SystemManager();
    //注册管线管理类
    this._pipeManager = new PipeManager();
    Register.instance = this;
  }
  /**
   * @property {Array<ComponentManager>} 注册的所有组件管理类
   */
  get managers() {
    return this._managers;
  }
  /**
   * 根据组件类型获取该类型的组件管理类。
   * @param {Number} type 组件类型正整数,目前支持到16。
   * @returns {ComponentManager} 范围type类型的管理类。
   */
  manager(type) {
    return this.managers[type];
  }
  /**
   * 获取实体管理类。
   * @property {EntityManager} 注册的实体管理类
   */
  get entityManager() {
    return this._entityManager;
  }
  /**
   * 获取系统管理类。
   * @property {SystemManager} 注册的系统管理类
   */
  get systemManager() {
    return this._systemManager;
  }
  /**
   * 获取管线管理类。
   * @property {PipeManager} 注册的管线管理类
   */
  get pipeManager() {
    return this._pipeManager;
  }
  destroy() {
    this.pipeManager.clear();
    this.entityManager.clear();
    for (let i = 0; i < 22; i++) {
      this.managers[i].clear();
    }
    this._managers = null;
    this._pipeManager = null;
    this._entityManager = null;
    Register.instance = null;
  }
}
export { Register };
